#                                                                    -*-perl-*-
$description = "Test pattern-specific variable settings.";

$details = "\
Create a makefile containing various flavors of pattern-specific variable
settings, override and non-override, and using various variable expansion
rules, semicolon interference, etc.";

# basics

run_make_test(q!all: one.x two.x three.x
FOO = foo
BAR = bar
BAZ = baz
one.x: override FOO = one
%.x: BAR = two
t%.x: BAR = four
thr% : override BAZ = three
one.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ)
four.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ)
baz: ; @echo $@: $(FOO) $(BAR) $(BAZ)

# test matching multiple patterns
a%: AAA = aaa
%b: BBB = ccc
a%: BBB += ddd
%b: AAA ?= xxx
%b: AAA += bbb
.PHONY: ab
ab: ; @echo $(AAA); echo $(BBB)
!,
              "", "one.x: one two baz\ntwo.x: foo four baz\nthree.x: foo four three\n");

# try the override feature

run_make_test(undef, "BAZ=five",
              "one.x: one two five\ntwo.x: foo four five\nthree.x: foo four three\n");

# make sure patterns are inherited properly

run_make_test(undef, "four.x",
              "baz: foo two baz\nfour.x: foo two baz\n");

# test multiple patterns matching the same target

run_make_test(undef, "ab", "aaa bbb\nccc ddd\n");

# test pattern-specific exported variables

run_make_test('
/%: export foo := foo

/bar:
#TAB#@echo $(foo) $$foo
', '', 'foo foo');

# test expansion of pattern-specific simple variables

run_make_test('
.PHONY: all

all: inherit := good $$t
all: bar baz

b%: pattern := good $$t

global := original $$t


# normal target
#
ifdef rec
bar: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
else
bar: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
endif

bar: ; @echo \'normal: $a;\'


# pattern target
#
ifdef rec
%z: a = global: $(global) pattern: $(pattern) inherit: $(inherit)
else
%z: a := global: $(global) pattern: $(pattern) inherit: $(inherit)
endif

%z: ; @echo \'pattern: $a;\'


global := new $$t
',
'',
'normal: global: original $t pattern:  inherit: ;
pattern: global: original $t pattern:  inherit: ;');

# test expansion of pattern-specific recursive variables

run_make_test(undef, # reuse previous makefile
'rec=1',
'normal: global: new $t pattern: good $t inherit: good $t;
pattern: global: new $t pattern: good $t inherit: good $t;');

# override in pattern-specific variables

run_make_test('
a%: override FOO += f1
a%: FOO += f2
ab: ; @echo "$(FOO)"
',
              '', "f1\n");

run_make_test(undef, 'FOO=C', "C f1\n");

# Test shortest stem selection in pattern-specific variables.

run_make_test('
%-mt.x: x := two
%.x: x := one

all: foo.x foo-mt.x

foo.x: ;@echo $x
foo-mt.x: ;@echo $x
',
'',
"one\ntwo");

1;
